﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AccesoDatos.Objetos;
using AccesoDatos.Manejador;
using System.Runtime.InteropServices;

namespace RMA.Pantallas
{
    public partial class frmCreaOrdenInterna : Form
    {
        [DllImport("user32.dll")]
        static extern bool AnimateWindow(IntPtr hwnd, uint dwTime, uint dwFlags);

        public class WinApi
        {
            public static int GWL_EXSTYLE = -20;
            public static int WS_EX_LAYERED = 0x80000;
            public static int LWA_ALPHA = 0x2;
            [DllImport("user32")]
            public static extern int SetLayeredWindowAttributes(IntPtr hWnd, byte crey, byte alpha, int dwFlags);
            [DllImport("user32")]
            public static extern int GetLayeredWindowAttributes(IntPtr hWnd, byte crey, out byte alpha, int dwFlags);
            [DllImport("user32")]
            public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
            [DllImport("user32")]
            public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
        }
        void mkwndtrans(IntPtr hWnd, int num)
        {
            int oldWinStyle = WinApi.GetWindowLong(hWnd, WinApi.GWL_EXSTYLE);
            WinApi.SetWindowLong(hWnd, WinApi.GWL_EXSTYLE,
            num < 255 ? oldWinStyle | WinApi.WS_EX_LAYERED :
            oldWinStyle & WinApi.WS_EX_LAYERED);
            WinApi.SetLayeredWindowAttributes(hWnd, 0, (byte)num, WinApi.LWA_ALPHA);
        }
        enum AnimateWindowFlags : uint
        {
            AW_HOR_POSITIVE = 0x00000007,
            AW_HOR_NEGATIVE = 0x00000002,
            AW_VER_POSITIVE = 0x00000004,
            AW_VER_NEGATIVE = 0x00000008,
            AW_CENTER = 0x00000010,
            AW_HIDE = 0x00010000,
            AW_ACTIVATE = 0x00020000,
            AW_SLIDE = 0x00040000,
            AW_BLEND = 0x00080000
        }
        ToolTip tlpBtn = new ToolTip();
        string Folio = "";
        public frmCreaOrdenInterna()
        {
            InitializeComponent();
        }

        private void frmCreaOrdenInterna_Load(object sender, EventArgs e)
        {
            tlpBtn.SetToolTip(btnGuardar, "Guarda Registro de RMA");
            tlpBtn.SetToolTip(btnCancelar, "Cancelar los cambios");
            txtCodAut.Focus();
            CrearNuevoFolio();
            
        }

        private void cbAccesorios_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbAccesorios.SelectedItem.ToString().ToLower() == "detalles")
            {
                frmAccesorios frmA = new frmAccesorios();
                AnimateWindow(frmA.Handle, 250, (uint)AnimateWindowFlags.AW_CENTER);
                frmA.ShowDialog();
                if (frmA.LstAcc != null)
                {
                    lbxAccesorios.DataSource = frmA.LstAcc;
                    lbxAccesorios.DisplayMember = "Accesorio";
                }

            }
            else
            {
                lbxAccesorios.DataSource = null;
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
           
            Manejador_OrdenInterna objInt = new Manejador_OrdenInterna();
            clsCreaOrdenServicio objOrden = new clsCreaOrdenServicio();
            bool guarda = false;
            bool guarda2 = false;
            bool ValidaCodigo = false;
            bool Modifica = false;
            int ExisteArt = 0;
            string Fol = "";
            ValidaCodigo = objInt.ValidaCodigoAutorizacion(txtCodAut.Text);
            DataTable Art = objInt.RegresaArticulo(txtCodigo.Text);
            foreach (DataRow r in Art.Rows)
            {
                if (r[0].ToString() != "")
                {
                    ExisteArt = 1;
                }
            }
            if (ValidaCodigo)
            {
                if (cbAccesorios.Text != "")
                {
                    if (txtCosto.Text != "")
                    {
                        if (ExisteArt != 0)
                        {
                            try
                            {
                                objOrden.Fol = lblFolio.Text;
                                objOrden.Sucid = frmPrincipal.SucursalId;
                                objOrden.Producto = txtCodigo.Text;
                                objOrden.Serie = txtSerie.Text;
                                objOrden.Observacion = txtObservaciones.Text;
                                objOrden.Falla = txtDescFalla.Text;
                                objOrden.Accesorios = "";
                                DataTable dt = objInt.RegresaDescripcion(txtCodigo.Text);
                                foreach (DataRow r in dt.Rows)
                                {
                                    if (r[0].ToString() != "")
                                    {
                                        objOrden.DescripcionDetalle = r[0].ToString();
                                    }

                                }

                                objOrden.Valor = float.Parse(txtCosto.Text);
                                if (cbAccesorios.Text.ToLower() == "completo")
                                {
                                    objOrden.Condicion = true;
                                }
                                else
                                {
                                    if (cbAccesorios.Text.ToLower() == "detalles")
                                    {
                                        objOrden.Condicion = false;
                                    }
                                }

                                //Fol = objInt.GuardaOrdenInterna(objOrden);
                                guarda = objInt.GuardaOrdenInterna(objOrden);
                                guarda2 = objInt.GuardaMovimiento(objOrden.Fol, "Registro de Orden", frmPrincipal.IdUsr.ToString(), txtDescFalla.Text, "10");
                                Modifica = objInt.ModificarFolio(objOrden.Sucid, objOrden.Fol.Substring(2, 5));
                                if (objOrden.Condicion)
                                {
                                    if (lbxAccesorios.DataSource != null)
                                    {
                                        GuardaAccesorios(objOrden.Fol);
                                    }
                                }
                                
                                if (guarda)
                                {
                                    MessageBox.Show("Orden Interna Guardada correctamente: " + objOrden.Fol, "Éxito", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                                    TerminaOrden();

                                }


                            }
                            catch (Exception ex)
                            {

                            }
                        }
                        else
                        {
                            MessageBox.Show("No existe el Articulo, Intente Nuevamente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    
                        }
                        
                    }
                    else
                    {
                        MessageBox.Show("Ingrese el costo del articulo", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    
                }
                else
                {
                    MessageBox.Show("Seleccione la condicion de los accesorios", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
               
            }
            else
            {
                MessageBox.Show("Codigo de Autorizacion inválido", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            
        }
        public void GuardaAccesorios(string strFolio)
        {
            List<clsAccesorios> lstAccesorios = new List<clsAccesorios>();
            clsAccesorios objAcc = new clsAccesorios();
            Manejador_OrdenServicio objA = new Manejador_OrdenServicio();

            foreach (clsAccesorios s in lbxAccesorios.Items)
            {
                objAcc = new clsAccesorios();
                objAcc.Accesorio = s.Accesorio;
                lstAccesorios.Add(objAcc);
            }
            try
            {
                objA.GuardaAccesorios(lstAccesorios, strFolio);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }





        }
        private void TerminaOrden()
        {
            this.Close();
        }
        private void CrearNuevoFolio()
        {
            DataTable dtFolio = null;
            Manejador_OrdenInterna objOrden = new Manejador_OrdenInterna();
            string strSucID = "INT";
            int intNuevoFolio = 0;
            

            try
            {
                dtFolio = objOrden.RegresaUltimoRMAInt(strSucID);
                foreach (DataRow r in dtFolio.Rows)
                {
                    intNuevoFolio = int.Parse(r[0].ToString());
                    
                }
                intNuevoFolio = intNuevoFolio + 1;
                Folio = "88" + intNuevoFolio.ToString().PadLeft(5, '0');
                lblFolio.Text = Folio;
             
            }
            catch (Exception ex)
            {
                Folio = "0";
            }
            


            
        }
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea Cancelar el registro?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                this.Close();
            }
        }

        private void btnCosto_Click(object sender, EventArgs e)
        {
            DataTable dtCosto = null;
            Manejador_OrdenInterna objOrden = new Manejador_OrdenInterna();

            dtCosto = objOrden.RegresaCosto(txtSerie.Text, txtCodigo.Text);
            if (dtCosto.Rows.Count > 0)
            {
                foreach (DataRow r in dtCosto.Rows)
                {
                    if (r[0].ToString() != "")
                    {
                        txtCosto.Text = r[0].ToString();
                    }
                    else
                    {
                        txtCosto.Enabled = true;
                        txtCosto.BackColor = Color.White;
                        txtCosto.Focus();
                    }

                }
            }
            else
            {
                txtCosto.Enabled = true;
                txtCosto.BackColor = Color.White;
                txtCosto.Focus();
            }
            
            
            
        }

        private void txtCosto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }
        
    }
}
